import java.util.Random;
import java.util.zip.DataFormatException;

import com.acme.bankapp.domain.bank.Bank;
import com.acme.bankapp.service.bank.BankDataLoaderService;
import com.acme.bankapp.service.bank.BankService;

public class BankApplication {
  public static void main(String[] args) {
    String feedfilename = null;
    String loadbankfilename = null;
    for(int i=0; i<args.length; i++){
      if(args[i].equals("-loadfeed")){
        if(i+1 == args.length){
          System.err.println("Опция -loadfeed должна содержать 1 аргумент (подано 0).");
          return;
        }
        feedfilename = args[i+1];
        break;
      }
      else if(args[i].equals("-loadbank")){
        if(i+1 == args.length){
          System.err.println("Опция -loadbank должна содержать 1 аргумент (подано 0).");
          return;
        }
        loadbankfilename = args[i+1];
      }
    }
    if(feedfilename != null && loadbankfilename != null){
      System.err.println("Невозможно одновременно исполнить -loadfeed и -loadbank.");
      return;
    }
    Bank bank = null;
    if(feedfilename != null){
      try{
        bank = BankDataLoaderService.loadBankFromFile(feedfilename);
      }
      catch(DataFormatException e){
        System.out.println("Cannot create an instance of Bank; Input file is corrupted");
        System.out.println(e.getMessage());
        return;
      }
    }
    else if(loadbankfilename != null){
      try{
        bank = BankDataLoaderService.readBank();
      }
      catch(DataFormatException e){
        System.out.println("Cannot create an instance of Bank; Input file is corrupted");
        System.out.println(e.getMessage());
        return;
      }
    }
    if(bank == null){
      System.err.println("Банк не загружен в систему!");
      return;
    }
    try{
      BankService.printMaximumAmountToWithDraw(bank);
    }
    catch(DataFormatException e){
      System.err.println(e.getMessage());
    }
  }
  static void modifyBank(Bank bank){
    Random rand = new Random();
    for(int i=0; i<bank.getClients().size(); i++){
      for(int j=0; j<bank.getClients().get(i).getAcconts().size(); j++){
        bank.getClients().get(i).getAcconts().get(j).deposit(rand.nextInt(100));
      }
    }
  }
  static void printBalance(Bank bank){
    for(int i=0; i<bank.getClients().size(); i++){
      for(int j=0; j<bank.getClients().get(i).getAcconts().size(); j++){
        System.out.println(bank.getClients().get(i).getAcconts().get(j).getBalance());
      }
    }
  }
  static void printClientSalutations(Bank bank){
    for(int i=0; i<bank.getClients().size(); i++){
      bank.getClients().get(i).getClientSaltation();
    }
  }
}
